﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Recursos.Model
{
    public class EquipoModel
    {
        public IList<TipoRecurso> CargarTiposRecurso()
        {
            var datacontext = new DataClassesRecursosDataContext();
            var tipos = new Repository<TipoRecurso>(datacontext);
            return tipos.GetAll().ToList();
        }

        public int VerificarRecurso(string serie, string codigo)
        {
            var datacontext = new DataClassesRecursosDataContext();
            var tipos = new Repository<Recurso>(datacontext);
            return tipos.SearchFor(s => s.CodActivo == codigo || s.NumSerie == serie).Where(s => s.Borrado == false).First().id;
        }

        public int VerificarActualizarRecurso(string serie, string codigo)
        {
            var datacontext = new DataClassesRecursosDataContext();
            var tipos = new Repository<Recurso>(datacontext);
            return tipos.SearchFor(s => s.CodActivo == codigo && s.NumSerie == serie).Where(s => s.Borrado == false).First().id;
        }

        public int CrearRecurso(int tipoRecurso,
                                string numActivo,
                                string numSerie,
                                string nombre,
                                string estado,
                                string descripcion)
        {
            try
            {
                var idrecurso=VerificarRecurso(numSerie, numActivo);
                
                    return 0;
                

            }
            catch (Exception)
            {
                var datacontext = new DataClassesRecursosDataContext();
                var recursos = new Repository<Recurso>(datacontext);
                var espacios = new Repository<Espacio>(datacontext);
                var nulo = espacios.SearchOne(s => s.Codigo == "sin asignar");
                var recurso = new Recurso { Nombre="", Descripcion = descripcion, IdTipo = tipoRecurso, NumSerie = numSerie, Estado = estado, CodActivo = numActivo, Borrado = false,Espacio=nulo.id };
                recursos.Insert(recurso);
                datacontext.SubmitChanges();
                return recurso.id;
            }
        }

        public IList<Recurso> CargarRecursos()
        {
            var datacontext = new DataClassesRecursosDataContext();
            var recursos = new Repository<Recurso>(datacontext);
            return recursos.GetAll().ToList();
            
        }

        public int ActualizarRecurso(int id, string codigoActivo, string numSerie,
                                    int tipo, string estado, int espacio)
        {
            
                    var datacontext = new DataClassesRecursosDataContext();
                    var equipo = new Repository<Recurso>(datacontext);
                    var duplicado1 = equipo.SearchOne(dup => dup.CodActivo== codigoActivo);
                    var duplicado2 = equipo.SearchOne(dup => dup.NumSerie==numSerie);
                    if(duplicado1!=null && duplicado2!=null)
                        if (duplicado1.id != id || duplicado2.id != id)
                            return 0;
                        else
                        {
                            var recurso = equipo.GetById(id);
                            recurso.CodActivo = codigoActivo;
                            recurso.NumSerie = numSerie;
                            recurso.IdTipo = tipo;
                            recurso.Estado = estado;
                            recurso.Espacio = espacio;
                            datacontext.SubmitChanges();
                            return id;
                        }
                    var recurso2 = equipo.GetById(id);
                    recurso2.CodActivo = codigoActivo;
                    recurso2.NumSerie = numSerie;
                    recurso2.IdTipo = tipo;
                    recurso2.Estado = estado;
                    recurso2.Espacio = espacio;
                    datacontext.SubmitChanges();
                    return id;
                
           
            
        }

        public int ElminarRecurso(int recursoId)
        {
            try
            {
                var datacontext = new DataClassesRecursosDataContext();
                var equipo = new Repository<Recurso>(datacontext);
                equipo.Delete(recursoId);
                datacontext.SubmitChanges();
                return recursoId;
            }
            catch (Exception)
            {

                return 0;
            }
            
        }

        public Recurso CargarPorId(int periodoId)
        {
            var datacontext = new DataClassesRecursosDataContext();
            var equipo = new Repository<Recurso>(datacontext);
            return equipo.GetById(periodoId);
        }
    }
}